from django.shortcuts import render
from rest_framework.views import APIView
from .serializers import LoginSerializer, UserSerializer
from datetime import datetime
from .authentications import generate_jwt
from rest_framework.response import Response
from rest_framework import status
from rest_framework.permissions import IsAuthenticated
from .serializers import ResetPwdSerializer
from rest_framework import status


class LoginView(APIView):
    # 写这种类视图要在url上写类名.as_view()
    def post(self, request):
        # 1、验证数据是否可用，用序列化
        # 前端表单数据传里面
        serializer = LoginSerializer(data=request.data)
        # 如果验证成功
        if serializer.is_valid():
            # 做校验的时候加进去的
            # validate_data是Django REST framework中序列化器（Serializer）的一个方法，
            # 用于验证数据并返回验证后的数据。在这段代码中，validate_data方法被调用来获取名为'user'的数据
            user = serializer.validated_data.get('user')
            # get的user是前端发的都叫user
            user.lat_login = datetime.now()
            user.save()
            token = generate_jwt(user)
            # 后端返回token和用户信息，你也可以再写个api发用户信息
            return Response({'token': token, 'user': UserSerializer(user).data})
            # 哈哈哈直接打印在浏览器上了
            # 是的，这段代码中的Response对象会将生成的JWT（JSON Web Token）作为响应返回给浏览器。浏览器接收到这个响应后，可以将其中的token存储起来，以便后续请求时使用
        else:
            print(serializer.errors)
            detail = list(serializer.errors.values())[0][0]
            # drf在返回响应式非200的时候，他的错误参数名叫detail,所以我们这里也叫detail
            return Response({"detail": detail}, status=status.HTTP_400_BAD_REQUEST)


# class ResetPwdView(APIView):
#     # 因为除了登录都需要校验，这么设置每个视图都要写，很麻烦
#     # 所以直接写一个拦截器，像springboot一样
#     # Django里是使用中间件
#     # permission_classes = (IsAuthenticated,)  # 这个就是登录校验
#     def post(self, request):
#         serializer = ResetPwdSerializer(data=request.data, context={'request': request})
#         if serializer.is_valid():
#             pwd1 = serializer.validated_data.get('pwd1')
#             request.user.set_password(pwd1)
#             request.user.save()
#             return Response()
#         else:
#             print(serializer.errors)
#             detail = list(serializer.errors.values())[0][0]
#             return Response({"detail": detail}, status=status.HTTP_400_BAD_REQUEST)
class ResetPwdView(APIView):
    def post(self, request):

        # request：是DRF封装的，rest_framework.request.Request
        # 这个对象是针对django的HttpRequest对象进行了封装

        from rest_framework.request import Request
        serializer = ResetPwdSerializer(data=request.data, context={'request': request})
        if serializer.is_valid():
            pwd1 = serializer.validated_data.get('pwd1')
            request.user.set_password(pwd1)
            request.user.save()
            return Response()
        else:
            print(serializer.errors)
            detail = list(serializer.errors.values())[0][0]
            return Response({"detail": detail}, status=status.HTTP_400_BAD_REQUEST)